/*
 * @Author: wwssaabb
 * @Date: 2021-12-09 08:48:53
 * @LastEditTime: 2021-12-09 08:59:31
 * @FilePath: \handwritten-code\algorithm\反转单链表.js
 */


/* 
给你单链表的头节点 head， 请你反转链表， 并返回反转后的链表。

示例 1：
输入： head = [1, 2, 3, 4, 5]
输出：[5, 4, 3, 2, 1]

来源： 力扣（ LeetCode）
链接： https: //leetcode-cn.com/problems/reverse-linked-list
*/

//双指针，时间O(n)、空间O(n)
var reverseList = function (head) {
  let pre = null,
    cur = head
  while (cur) {
    const next = cur.next
    cur.next = pre
    pre = cur
    cur = next
  }
  return pre
};

/* 
思路：双指针遍历链表，双指针初始指向=> pre=null,cur=head
  先拿到剩余的链表=>cur.next
  将cur.next指向pre（null）=>cur.next=pre
  此时需要将pre和cur都进入下一位，注意顺序
  此时cur的next已经指向pre(null),所以接下来的pre.next需要等于cur，所以pre=cur
  cur=next进入下一步
*/